草庐IT

c++ - QMap 和 std::unique_ptr

全部标签

c++ - std::string not nothrow move assignable or comparable?

我在研究type_traits时,发现了std::string的这个奇怪属性:$cata.cpp#include#includestatic_assert(std::is_nothrow_move_assignable::value,"???");static_assert(noexcept(std::declval()==std::declval()),"???");$g++-std=c++14a.cppa.cpp:4:1:error:staticassertionfailed:???static_assert(std::is_nothrow_move_assignable::val

c++ - 固定大小数组与 alloca(或 VLA)

alloca()何时比通过声明固定大小的数组在堆栈上分配内存更可取?详细信息:众所周知,alloca()是一个有争议的函数。使用不当,会导致堆栈溢出。如果使用得当,它可以通过避免堆分配从紧密循环中缩短几纳秒。在thisquestion关于为什么alloca被认为是不好的,一些HitTest门的答案提倡偶尔使用alloca。另一种从堆栈分配的方法是简单地声明一个固定大小的数组。在HowardHinnant'sstackallocator中的arena类中可以找到此策略的示例。.(该代码当然是C++,但该概念仍然适用于C。)使用alloca与固定大小数组的权衡是什么?什么时候,如果有的话,

c++ - 在 C++11 中为包含 std::tuple 的对象键入删除

假设我有一个通用类Container,它包含任何类型的元组,并且有一个函数templateT&get();返回对元组中元素的引用。我非常简单的实现如下所示:templateclassContainer{std::tuplecontents;public:Container(constTs&...ts):contents(ts...){}templateT&get(){//TypeIndexissomemeta-programmingstructtofindindexofTinTsreturnstd::get::value>(contents);}};有没有什么好的类型删除技术可以在不改

c++ - 是否可以在只读模式下连接到内存中的 sqlite 数据库?

我知道我可以在sqlite3_open_v2()中使用file:DB_NAME?mode=memory&cache=shared打开内存中sqlite数据库的多个连接。我打开了2个到内存数据库的连接。一个带有标志SQLITE_OPEN_URI|SQLITE_OPEN_CREATE|SQLITE_OPEN_READWRITE和另一个带有SQLITE_OPEN_READONLY|SQLITE_OPEN_URI。问题是sqlite允许我修改数据库,即使连接是只读的。有什么方法可以使连接只读吗?我应该编写自己的VFS来完成它吗? 最佳答案

c++ - 从 C/C++ 调用 Scala 代码

如果我有一个包含已编译scala方法的.jar文件,是否有任何方法可以从C/C++dll调用它?我怎样才能做到这一点?我只能找到相反的信息。 最佳答案 Scala程序(一旦编译)是一个Java类。所以请遵循这个建议:HowtoaccesstheJavamethodinaC++application 关于c++-从C/C++调用Scala代码,我们在StackOverflow上找到一个类似的问题: https://stackoverflow.com/questi

c++ - 禁用单个文件的预编译头

我在vs2013上开发一个包含许多.cpp文件的项目,并为它们使用预编译的header。我正在使用CMake构建我的项目。但是我有一个.c文件(我们称它为xyz.c),我想为它禁用预编译头文件。我尝试了几种方法,但如果我为所有.cpp文件启用预编译header,它也会自动为.c文件启用。这是我尝试过的:set_source_files_properties(xyz.cPROPERTIESCOMPILE_FLAGS/Y-xyz.c)假设/Yu为所有文件打开,我只是尝试为xyz.c关闭此选项。谁知道什么方法,请告诉我。 最佳答案 从cm

c++ - 在主程序退出期间销毁等待 std::condition_variable 的线程的正确方法

我正在使用std::conditional_variable为多线程程序中的信号计时,以控制各个关键部分的流程。该程序可以运行,但在退出期间我不得不使用谓词(kill_==true)来避免破坏仍在等待std::conditional_variable::wait()的线程。我不知道它是否是销毁所有等待线程的正确方法,征求意见。这是一个代码片段:classtimer{//...timer(std::shared_ptrparent,constbool&kill):parent_(parent),kill_(kill){}private:std::condition_variablecv_

c++ - 带有自定义删除器的 std::shared_ptr 的 Typedef 别名

我想为std::shared_ptr创建别名使用自定义删除器。此代码有效,但仅适用于唯一指针。我收到有关标有[1]的行的无效模板参数数量的错误。我注意到std::unique_ptr的模板和ctor参数和std::shared_ptr与所列不同here和here我注意到这个问题可能与this重复,但我不知道如何解决我的问题#include#includetemplatestructDeleter{voidoperator()(T*p)constnoexcept{p->Drop();//SFINAE};};templateusingmy_unique_ptr=std::unique_pt

c++ - 在此上下文中的完美转发和 std::move 行为

我是C++新手,我想了解完美转发如何与std::move结合使用.我定义了一个std::vectorqueue()我想使用模板函数填充fillWithData.由于我花了一些时间研究完美转发,所以我首先要检查我是否理解正确,其次要弄清楚move是什么。在此上下文中的行为。fillWithData是一个可变参数模板函数,感谢forward,能够通过折叠规则将参数视为左值或右值。(Q1-是否正确?)templatestaticvoidfillWithData(Container&oDataContainer,Args&&...args)//universalreference{typede

c++ - static_cast<T&&>(t) 编译速度比 std::forward<T>(t) 快?

最近,我在这里阅读了range-v3的提交评论:https://github.com/ericniebler/range-v3/commit/a4829172c0d6c43687ba213c54f430202efd7497提交消息说,marginallyimprovecompiletimesbyreplacingstd::forwardwithstatic_cast我知道std::forward(t)返回static_cast(t),按照标准。我也知道有时static_cast(t)当T&&t时会正常工作是通过引用折叠规则的通用引用(或转发引用)。我感兴趣的是提交消息说static_c